[Amazon Connect] 問い合わせフローの中でLambda関数を実行する
1 はじめに
Amazon Connectでは、問い合わせフローの中でAWS Lambda(以下Lambda)関数を実行することができます。これによって、Amazon Connectでは、他のAWSサービスや外部サービスとの連携が可能になっています。
今回は、このLambda関数の実行要領について確認してみました。
2 問い合わせフローからLambda関数を呼び出す手順
問い合わせフローからLambda関数を呼び出す手順は、以下のとおりです。
- トリガーの定義
- 「AWS Lambda関数を呼び出す」ブロックの設定
- Lambdaでのビジネスロジック作成
- 「問い合わせ属性を確認する」ブロックによるフローの分岐(戻り値を使用する場合)
(1) トリガーの定義
Amazon ConnectからLambdaを呼び出すには、トリガー(パーミッション)を追加する必要があります。 残念ながら、現在(2018年6月時点)、他のAWSサービスのようにAWSコンソールのDesignerでは、トリガーの追加に、Amazon Connectが無いため、ここからGUIで追加することはできません。
AWS CLIでトリガー(パーミッション)を追加するコマンドは以下のとおりです。
$ aws lambda add-permission --function-name function:FUNCTION_NAME \ --statement-id 1 --principal connect.amazonaws.com \ --action lambda:InvokeFunction --source-account ACCOUNT \ --source-arn CONNECT_ARN
- CONNECT_ARN: Amazon Connect インスタンスのarn
- FUNCTION_NAME: Lambdaの関数名
- ACCOUNT: Lambda関数の AWS アカウントID
実際に追加しているようすです。Lambdaファンクションの名前は、ConnectToLambdaSampleで、シドニーで作業しています。(一部のマスクや改行など編集しています)
$ aws lambda add-permission --function-name function:ConnectToLambdaSample --statement-id 1 --principal connect.amazonaws.com --action lambda:InvokeFunction --source-account xxxxxxxxxxxx --source-arn arn:aws:connect:ap-southeast-2:xxxxxxxxxxxx:instance/8db137d2-cacd-xxxx-xxxx-xxxxxxxxxxxx --region ap-southeast-2 { "Statement": "{ \"Sid\" : \"1\", \"Effect\" : \"Allow\", \"Principal\" : { \"Service\" : \"connect.amazonaws.com\" }, \"Action\" : \"lambda : InvokeFunction\", \"Resource\" : \"arn : aws : lambda : ap-southeast-2 : xxxxxxxxxxxx : function : ConnectToLambdaSample\", \"Condition\" : { \"StringEquals\" : { \"AWS : SourceAccount\" : \"xxxxxxxxxxxx\" }, \"ArnLike\" : { \"AWS : SourceArn\" : \"arn : aws : connect : ap-southeast-2 : xxxxxxxxxxxx : instance/8db137d2-cacd-xxxx-xxxx-xxxxxxxxxxxx\" } } }" }
(2) 「AWS Lambda関数を呼び出す」ブロックの設定
問い合わせフローでは、AWS Lambda関数を呼び出すブロックを追加します。
オプション設定の関数のARNで、呼び出すLambda関数のarnを設定します。
(3) Lambdaでのビジネスロジック作成
Lambda関数では、問い合わせフローから送られてきたJSONを解析し、ビジネスロジックを作成します。
問い合わせフローから送られてくるJSONは、次のような内容になっています。
{ "Details": { "ContactData": { "Attributes": {}, "Channel": "VOICE", "ContactId": "305661db-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "CustomerEndpoint": { "Address": "+819012345678", "Type": "TELEPHONE_NUMBER" }, "InitialContactId": "305661db-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "InitiationMethod": "INBOUND", "InstanceARN": "arn:aws:connect:ap-southeast-2:xxxxxxxxxxxx:instance/8db137d2-cacd-xxxx-xxxx-xxxxxxxxxxxx", "PreviousContactId": "305661db-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "Queue": null, "SystemEndpoint": { "Address": "+819012345678", "Type": "TELEPHONE_NUMBER" } }, "Parameters": {} }, "Name": "ContactFlowEvent" }
- ContactData: 問い合わせごとにAmazon Connectから常に渡されるデータ(一部はオプション)
- Attributes: 問い合わせフローで「連絡先属性の設定」ブロックなどで設定された値(保存された属性がない場合、このマップは空白になることがあります)
- Parameters: 「AWS Lambda関数を呼び出す」で定義されたパラメーター
逆にLambdaからは、{string:string}形式のJSONを返すことができます。
下記のコードでは、{"Name":"Taro"} を返しています。
(4) 「問い合わせ属性を確認する」ブロックによるフローの分岐(戻り値を使用する場合)
Lambdaから返された値で、問い合わせフローを分岐するには、問い合わせ属性を確認するブロックを使用します。
問い合わせ属性を確認するブロックのオプションでは、Lambdaから返された値の比較判断が設定できます。
3 設定してみた
下記のような問い合わせフローを設定してみました。
Lambdaの戻り値に応じて分岐した後のプロンプトは、下記のように設定されています。
これによって、顧客の電話口には、Lambdaの戻り値に応じて、「Taroが返されました」若しくは、「Taro以外が返されました」と流れます。
4 最後に
今回は、問い合わせフローからのLambda関数の呼び出しを確認してみました。ロジックを組み込むことで一気にフローの自由度が広がります。また、Lambdaで外部のサービスとの連携が自由にできます。
いろいろ試してみたいと思います。
5 参考リンク
Amazon Connect 簡単に使えるクラウド型コンタクトセンター
Amazon Connect Administrator Guide
Amazon Connectのデータストリーミング機能でAgent Event StreamsをKinesis Streamに送る
[Amazon Connect] プロンプトのテキスト読み上げにSSMLが使用可能です
[Amazon Connect] 問い合せフローのログを保存する
[Amazon Connect] キューに入った時のメッセージや保留音を変更する
Amazon Connectでコンタクトフロー上で設定した値を画面上に表示する方法
Amazon ConnectのCCP(Contact Control Pannel)から発信、転送する方法
Amazon Connectのデータストリーミング機能でコンタクト履歴情報をKinesis Firehose経由でS3に保存する
[Lex] Amazon Connectを使用して Amazon Lex を電話で使用してみる
Amazon ConnectをZendesk Support上で使用してみる
Amazon Connect Outbound ContactのPreview版を試してみる
Amazon Connect Streamsで各種EventをSubscribeする
Amazon Connect Streamsの初期セットアップ手順
(レポート)BAP202 : Amazon Connectでクラウドベースのコンタクトセンター向けにパーソナライズされた顧客体験を届ける #reinvent
Amazon Connect CTI Adapter for SalesforceでScreen Popupを試してみる
Amazon ConnectをSalesforce Service Cloud上で使用してみる
Amazon Connectを使って電話からEC2を再起動する
コールセンターサービス Amazon Connect で日本語TTSメッセージを再生する